Project - Laptop Price Analysis¶

Domain: Data Analyst¶

Introduction:¶

This project analyzes Laptop specfications and prices to understand what factors influence laptop prices. The dataset contains details like company, CPU, GPU, RAM, storage, weight, Touchscreen, IPS panel, Screen size, operating system, and price.

Objectives:¶

          The objective of this project is to analyze laptop specifications and understand how different features such as brand, RAM, screen size, storage type, operating system, and GPU influence the laptop price. This project focuses on data cleaning, exploratory data analysis (EDA), visualization, and extracting meaningful insights without using machine learning.

Tools Used:¶

Python: programming language for data analysis

Pandas: data cleaning and manipulation

NumPy: numerical operations

Matplotlib: data visualization

Seaborn: advanced and statistical visualizations

Data Description:¶

         The dataset contains detailed specifications of different laptop models collected from online sources. It includes 1275 rows and 23 columns. Each row represents one laptop, and the columns describe its technical features.

Key columns in the dataset include:¶

Company - Brand of the laptop

Product - Model name

TypeName - Category (Notebook, Ultrabook, Gaming Laptop, ect.)

Inches - Screen size

Ram - Ram capacity (in GB)

OS - Operating system

Weight - Laptop weight (in kg)

Price_euros - Laptop weight ( in kg)

ScreenW / ScreenH - Screen resolution

RetinaDisplay / Touchscreen / IPSpanel - Display features

CPU_company / GPU_company - Processor and GPU brand

PrimaryStorageType / SecondaryStorage - Storage capacities

PrimaryStorageType / SecondaryStorageType - Storage type (SSD, HDD, Hybrid, Flash)

Importing Libraries:¶

In [2]:
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns

Loading the Dataset:¶

In [3]:
df= pd.read_csv(r"C:\Users\sathv\Downloads\laptop_prices.csv", encoding='latin1')
df
Out[3]:
Company Product TypeName Inches Ram OS Weight Price_euros Screen ScreenW ... RetinaDisplay CPU_company CPU_freq CPU_model PrimaryStorage SecondaryStorage PrimaryStorageType SecondaryStorageType GPU_company GPU_model
0 Apple MacBook Pro Ultrabook 13.3 8 macOS 1.37 1339.69 Standard 2560 ... Yes Intel 2.3 Core i5 128 0 SSD No Intel Iris Plus Graphics 640
1 Apple Macbook Air Ultrabook 13.3 8 macOS 1.34 898.94 Standard 1440 ... No Intel 1.8 Core i5 128 0 Flash Storage No Intel HD Graphics 6000
2 HP 250 G6 Notebook 15.6 8 No OS 1.86 575.00 Full HD 1920 ... No Intel 2.5 Core i5 7200U 256 0 SSD No Intel HD Graphics 620
3 Apple MacBook Pro Ultrabook 15.4 16 macOS 1.83 2537.45 Standard 2880 ... Yes Intel 2.7 Core i7 512 0 SSD No AMD Radeon Pro 455
4 Apple MacBook Pro Ultrabook 13.3 8 macOS 1.37 1803.60 Standard 2560 ... Yes Intel 3.1 Core i5 256 0 SSD No Intel Iris Plus Graphics 650
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
1270 Lenovo Yoga 500-14ISK 2 in 1 Convertible 14.0 4 Windows 10 1.80 638.00 Full HD 1920 ... No Intel 2.5 Core i7 6500U 128 0 SSD No Intel HD Graphics 520
1271 Lenovo Yoga 900-13ISK 2 in 1 Convertible 13.3 16 Windows 10 1.30 1499.00 Quad HD+ 3200 ... No Intel 2.5 Core i7 6500U 512 0 SSD No Intel HD Graphics 520
1272 Lenovo IdeaPad 100S-14IBR Notebook 14.0 2 Windows 10 1.50 229.00 Standard 1366 ... No Intel 1.6 Celeron Dual Core N3050 64 0 Flash Storage No Intel HD Graphics
1273 HP 15-AC110nv (i7-6500U/6GB/1TB/Radeon Notebook 15.6 6 Windows 10 2.19 764.00 Standard 1366 ... No Intel 2.5 Core i7 6500U 1024 0 HDD No AMD Radeon R5 M330
1274 Asus X553SA-XX031T (N3050/4GB/500GB/W10) Notebook 15.6 4 Windows 10 2.20 369.00 Standard 1366 ... No Intel 1.6 Celeron Dual Core N3050 500 0 HDD No Intel HD Graphics

1275 rows × 23 columns

Data Cleaning / Data Preprocessing¶

   In this Data cleaning step, I checked the dataset for any issues that can affect the analysis.I verified if there are any missing values, duplicate rows, or incorrect data types. Data cleaning helps make the dataset accurate, consistent, and ready for analysis.

Checking missing values¶

In [4]:
df.isnull().sum()
Out[4]:
Company                 0
Product                 0
TypeName                0
Inches                  0
Ram                     0
OS                      0
Weight                  0
Price_euros             0
Screen                  0
ScreenW                 0
ScreenH                 0
Touchscreen             0
IPSpanel                0
RetinaDisplay           0
CPU_company             0
CPU_freq                0
CPU_model               0
PrimaryStorage          0
SecondaryStorage        0
PrimaryStorageType      0
SecondaryStorageType    0
GPU_company             0
GPU_model               0
dtype: int64

Handling missing data¶

In [4]:
df = df.dropna()

# Removes rows with missing/null values.

Checking how many Rows & Columns¶

In [13]:
df.shape
Out[13]:
(1275, 23)
In [6]:
df.info()

# Shows data types and whether any columns contains missing values.
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 1275 entries, 0 to 1274
Data columns (total 23 columns):
 #   Column                Non-Null Count  Dtype  
---  ------                --------------  -----  
 0   Company               1275 non-null   object 
 1   Product               1275 non-null   object 
 2   TypeName              1275 non-null   object 
 3   Inches                1275 non-null   float64
 4   Ram                   1275 non-null   int64  
 5   OS                    1275 non-null   object 
 6   Weight                1275 non-null   float64
 7   Price_euros           1275 non-null   float64
 8   Screen                1275 non-null   object 
 9   ScreenW               1275 non-null   int64  
 10  ScreenH               1275 non-null   int64  
 11  Touchscreen           1275 non-null   object 
 12  IPSpanel              1275 non-null   object 
 13  RetinaDisplay         1275 non-null   object 
 14  CPU_company           1275 non-null   object 
 15  CPU_freq              1275 non-null   float64
 16  CPU_model             1275 non-null   object 
 17  PrimaryStorage        1275 non-null   int64  
 18  SecondaryStorage      1275 non-null   int64  
 19  PrimaryStorageType    1275 non-null   object 
 20  SecondaryStorageType  1275 non-null   object 
 21  GPU_company           1275 non-null   object 
 22  GPU_model             1275 non-null   object 
dtypes: float64(4), int64(5), object(14)
memory usage: 229.2+ KB
In [8]:
# Removing extra spaces in text columns

df.columns= df.columns.str.strip()
for col in df.select_dtypes(include='object').columns:
    df[col]= df[col].str.strip()

# Removes extra spaces from text columns,avoids errors during analysis.
In [12]:
# Standardize column text(upper/lower case cleaning)

for col in df.select_dtypes(include='object'):
    df[col]= df[col].str.lower()

# Makes all text lowercase so values like "Windows" and "windows" are treated the same.
In [11]:
# Converting numeric columns to correct data types

numeric_cols = ['Ram','Weight','Price_euros','ScreenW','ScreenH']
df[numeric_cols] = df[numeric_cols].apply(pd.to_numeric, errors='coerce')

# Ensures numeric columns are in proper format(float/int)

Removing Duplicates:¶

In [6]:
df.drop_duplicates(inplace=True)

# Removes repeated values for better accuracy.

Describing Numeric Columns¶

In [5]:
df.describe()

# Gives statistical summary like mean, min, max, percentiles.
Out[5]:
Inches Ram Weight Price_euros ScreenW ScreenH CPU_freq PrimaryStorage SecondaryStorage
count 1275.000000 1275.000000 1275.000000 1275.000000 1275.000000 1275.000000 1275.000000 1275.000000 1275.000000
mean 15.022902 8.440784 2.040525 1134.969059 1900.043922 1073.904314 2.302980 444.517647 176.069020
std 1.429470 5.097809 0.669196 700.752504 493.346186 283.883940 0.503846 365.537726 415.960655
min 10.100000 2.000000 0.690000 174.000000 1366.000000 768.000000 0.900000 8.000000 0.000000
25% 14.000000 4.000000 1.500000 609.000000 1920.000000 1080.000000 2.000000 256.000000 0.000000
50% 15.600000 8.000000 2.040000 989.000000 1920.000000 1080.000000 2.500000 256.000000 0.000000
75% 15.600000 8.000000 2.310000 1496.500000 1920.000000 1080.000000 2.700000 512.000000 0.000000
max 18.400000 64.000000 4.700000 6099.000000 3840.000000 2160.000000 3.600000 2048.000000 2048.000000

View Data types:¶

In [7]:
df.dtypes
Out[7]:
Company                  object
Product                  object
TypeName                 object
Inches                  float64
Ram                       int64
OS                       object
Weight                  float64
Price_euros             float64
Screen                   object
ScreenW                   int64
ScreenH                   int64
Touchscreen              object
IPSpanel                 object
RetinaDisplay            object
CPU_company              object
CPU_freq                float64
CPU_model                object
PrimaryStorage            int64
SecondaryStorage          int64
PrimaryStorageType       object
SecondaryStorageType     object
GPU_company              object
GPU_model                object
dtype: object

Used df.isnull().sum() to identify null values. The dataset did not contain significate missing values.

Used df.drop_duplicates() to elimate repeated rows.

Corrected data types: Ensured columns like RAM, storage, and Ensured columns like RAM, storage, and weight were in the correct numeric or categorical format. Cleaned text fields: Standardized values in columns such as OS, Company, Storage Type, and Display features to maintain consistency.

In [14]:
pip install ydata-profiling
Requirement already satisfied: ydata-profiling in c:\users\sathv\anaconda3\lib\site-packages (4.17.0)Note: you may need to restart the kernel to use updated packages.

Requirement already satisfied: scipy<1.16,>=1.4.1 in c:\users\sathv\anaconda3\lib\site-packages (from ydata-profiling) (1.15.3)
Requirement already satisfied: pandas!=1.4.0,<3.0,>1.1 in c:\users\sathv\anaconda3\lib\site-packages (from ydata-profiling) (2.2.3)
Requirement already satisfied: matplotlib<=3.10,>=3.5 in c:\users\sathv\anaconda3\lib\site-packages (from ydata-profiling) (3.10.0)
Requirement already satisfied: pydantic>=2 in c:\users\sathv\anaconda3\lib\site-packages (from ydata-profiling) (2.10.3)
Requirement already satisfied: PyYAML<6.1,>=5.0.0 in c:\users\sathv\anaconda3\lib\site-packages (from ydata-profiling) (6.0.2)
Requirement already satisfied: jinja2<3.2,>=2.11.1 in c:\users\sathv\anaconda3\lib\site-packages (from ydata-profiling) (3.1.6)
Requirement already satisfied: visions<0.8.2,>=0.7.5 in c:\users\sathv\anaconda3\lib\site-packages (from visions[type_image_path]<0.8.2,>=0.7.5->ydata-profiling) (0.8.1)
Requirement already satisfied: numpy<2.2,>=1.16.0 in c:\users\sathv\anaconda3\lib\site-packages (from ydata-profiling) (2.1.3)
Requirement already satisfied: minify-html>=0.15.0 in c:\users\sathv\anaconda3\lib\site-packages (from ydata-profiling) (0.18.1)
Requirement already satisfied: filetype>=1.0.0 in c:\users\sathv\anaconda3\lib\site-packages (from ydata-profiling) (1.2.0)
Requirement already satisfied: phik<0.13,>=0.11.1 in c:\users\sathv\anaconda3\lib\site-packages (from ydata-profiling) (0.12.5)
Requirement already satisfied: requests<3,>=2.24.0 in c:\users\sathv\anaconda3\lib\site-packages (from ydata-profiling) (2.32.3)
Requirement already satisfied: tqdm<5,>=4.48.2 in c:\users\sathv\anaconda3\lib\site-packages (from ydata-profiling) (4.67.1)
Requirement already satisfied: seaborn<0.14,>=0.10.1 in c:\users\sathv\anaconda3\lib\site-packages (from ydata-profiling) (0.13.2)
Requirement already satisfied: multimethod<2,>=1.4 in c:\users\sathv\anaconda3\lib\site-packages (from ydata-profiling) (1.12)
Requirement already satisfied: statsmodels<1,>=0.13.2 in c:\users\sathv\anaconda3\lib\site-packages (from ydata-profiling) (0.14.4)
Requirement already satisfied: typeguard<5,>=3 in c:\users\sathv\anaconda3\lib\site-packages (from ydata-profiling) (4.4.4)
Requirement already satisfied: imagehash==4.3.1 in c:\users\sathv\anaconda3\lib\site-packages (from ydata-profiling) (4.3.1)
Requirement already satisfied: wordcloud>=1.9.3 in c:\users\sathv\anaconda3\lib\site-packages (from ydata-profiling) (1.9.4)
Requirement already satisfied: dacite>=1.8 in c:\users\sathv\anaconda3\lib\site-packages (from ydata-profiling) (1.9.2)
Requirement already satisfied: numba<=0.61,>=0.56.0 in c:\users\sathv\anaconda3\lib\site-packages (from ydata-profiling) (0.61.0)
Requirement already satisfied: PyWavelets in c:\users\sathv\anaconda3\lib\site-packages (from imagehash==4.3.1->ydata-profiling) (1.8.0)
Requirement already satisfied: pillow in c:\users\sathv\anaconda3\lib\site-packages (from imagehash==4.3.1->ydata-profiling) (11.1.0)
Requirement already satisfied: MarkupSafe>=2.0 in c:\users\sathv\anaconda3\lib\site-packages (from jinja2<3.2,>=2.11.1->ydata-profiling) (3.0.2)
Requirement already satisfied: contourpy>=1.0.1 in c:\users\sathv\anaconda3\lib\site-packages (from matplotlib<=3.10,>=3.5->ydata-profiling) (1.3.1)
Requirement already satisfied: cycler>=0.10 in c:\users\sathv\anaconda3\lib\site-packages (from matplotlib<=3.10,>=3.5->ydata-profiling) (0.11.0)
Requirement already satisfied: fonttools>=4.22.0 in c:\users\sathv\anaconda3\lib\site-packages (from matplotlib<=3.10,>=3.5->ydata-profiling) (4.55.3)
Requirement already satisfied: kiwisolver>=1.3.1 in c:\users\sathv\anaconda3\lib\site-packages (from matplotlib<=3.10,>=3.5->ydata-profiling) (1.4.8)
Requirement already satisfied: packaging>=20.0 in c:\users\sathv\anaconda3\lib\site-packages (from matplotlib<=3.10,>=3.5->ydata-profiling) (24.2)
Requirement already satisfied: pyparsing>=2.3.1 in c:\users\sathv\anaconda3\lib\site-packages (from matplotlib<=3.10,>=3.5->ydata-profiling) (3.2.0)
Requirement already satisfied: python-dateutil>=2.7 in c:\users\sathv\anaconda3\lib\site-packages (from matplotlib<=3.10,>=3.5->ydata-profiling) (2.9.0.post0)
Requirement already satisfied: llvmlite<0.45,>=0.44.0dev0 in c:\users\sathv\anaconda3\lib\site-packages (from numba<=0.61,>=0.56.0->ydata-profiling) (0.44.0)
Requirement already satisfied: pytz>=2020.1 in c:\users\sathv\anaconda3\lib\site-packages (from pandas!=1.4.0,<3.0,>1.1->ydata-profiling) (2024.1)
Requirement already satisfied: tzdata>=2022.7 in c:\users\sathv\anaconda3\lib\site-packages (from pandas!=1.4.0,<3.0,>1.1->ydata-profiling) (2025.2)
Requirement already satisfied: joblib>=0.14.1 in c:\users\sathv\anaconda3\lib\site-packages (from phik<0.13,>=0.11.1->ydata-profiling) (1.4.2)
Requirement already satisfied: charset-normalizer<4,>=2 in c:\users\sathv\anaconda3\lib\site-packages (from requests<3,>=2.24.0->ydata-profiling) (3.3.2)
Requirement already satisfied: idna<4,>=2.5 in c:\users\sathv\anaconda3\lib\site-packages (from requests<3,>=2.24.0->ydata-profiling) (3.7)
Requirement already satisfied: urllib3<3,>=1.21.1 in c:\users\sathv\anaconda3\lib\site-packages (from requests<3,>=2.24.0->ydata-profiling) (2.3.0)
Requirement already satisfied: certifi>=2017.4.17 in c:\users\sathv\anaconda3\lib\site-packages (from requests<3,>=2.24.0->ydata-profiling) (2025.8.3)
Requirement already satisfied: patsy>=0.5.6 in c:\users\sathv\anaconda3\lib\site-packages (from statsmodels<1,>=0.13.2->ydata-profiling) (1.0.1)
Requirement already satisfied: colorama in c:\users\sathv\anaconda3\lib\site-packages (from tqdm<5,>=4.48.2->ydata-profiling) (0.4.6)
Requirement already satisfied: typing_extensions>=4.14.0 in c:\users\sathv\anaconda3\lib\site-packages (from typeguard<5,>=3->ydata-profiling) (4.15.0)
Requirement already satisfied: attrs>=19.3.0 in c:\users\sathv\anaconda3\lib\site-packages (from visions<0.8.2,>=0.7.5->visions[type_image_path]<0.8.2,>=0.7.5->ydata-profiling) (24.3.0)
Requirement already satisfied: networkx>=2.4 in c:\users\sathv\anaconda3\lib\site-packages (from visions<0.8.2,>=0.7.5->visions[type_image_path]<0.8.2,>=0.7.5->ydata-profiling) (3.4.2)
Requirement already satisfied: puremagic in c:\users\sathv\anaconda3\lib\site-packages (from visions<0.8.2,>=0.7.5->visions[type_image_path]<0.8.2,>=0.7.5->ydata-profiling) (1.30)
Requirement already satisfied: annotated-types>=0.6.0 in c:\users\sathv\anaconda3\lib\site-packages (from pydantic>=2->ydata-profiling) (0.6.0)
Requirement already satisfied: pydantic-core==2.27.1 in c:\users\sathv\anaconda3\lib\site-packages (from pydantic>=2->ydata-profiling) (2.27.1)
Requirement already satisfied: six>=1.5 in c:\users\sathv\anaconda3\lib\site-packages (from python-dateutil>=2.7->matplotlib<=3.10,>=3.5->ydata-profiling) (1.17.0)
In [15]:
from ydata_profiling import ProfileReport
Upgrade to ydata-sdk

Improve your data and profiling with ydata-sdk, featuring data quality scoring, redundancy detection, outlier identification, text validation, and synthetic data generation.

In [17]:
profile = ProfileReport(df)
profile
Summarize dataset:   0%|          | 0/5 [00:00<?, ?it/s]
%|                                                                                           | 0/23 [00:00<?, ?it/s]
%|███████▏                                                                           | 2/23 [00:00<00:03,  6.84it/s]
100%|██████████████████████████████████████████████████████████████████████████████████| 23/23 [00:00<00:00, 51.01it/s]
Generate report structure:   0%|          | 0/1 [00:00<?, ?it/s]
Render HTML:   0%|          | 0/1 [00:00<?, ?it/s]
Out[17]:

Exploratory Data Analysis¶

Chart 1: Average Laptop Price by Company¶

In [11]:
%matplotlib inline

brand_price = df.groupby("Company")["Price_euros"].mean().sort_values(ascending= False)
brand_price.plot(kind='bar', figsize=(8,4), title='Average Laptop Price by Company')
plt.ylabel("Average Price(Euros)")
plt.show()
No description has been provided for this image

This bar chart shows the average price of laptops for each company.It helps compare which brands generally sell high-priced laptops and which offer budget options.

Key Insight:

Razer, LG, and MSI have the highest average prices, meaning they produce more premium laptops. Dell,Lenovo,and HP have many models but offer more budget-friendly options.

Chart 2: Laptop Type Distribution.¶

In [6]:
# Laptop Count by Type

df['TypeName'].value_counts().plot(kind= "bar", figsize=(4,2), color="Brown")
plt.title("Laptop Type Distribution")
plt.ylabel('')
plt.show()
No description has been provided for this image

This chart shows the number of laptops avaiable in each category such as Notebook, Gaming, Ultrabook, etc.

Key Insight:

Notebook laptops dominate the dataset, followed by Gaming and Ultrabook types. Very few models belong to Workstation and Netbook categories.

Chart 3: Weight Vs Price.¶

In [31]:
sns.scatterplot(x="Weight", y="Price_euros", data=df)
plt.title("Weight vs Price")
plt.show()
No description has been provided for this image

This scatter plot compares laptop weight with price to check if heavier laptops cost more.

Key Insight:

There is no storng relationship between weight and price.Both light and heavy laptops exist at low and high price ranges.

Chart 4: Average Laptop Price Vs Screen Size.¶

In [5]:
screen_trend= df.groupby("Inches")["Price_euros"].mean().sort_index()
lt.figure(figsize=(8,4))
plt.plot(screen_trend.index, screen_trend.values,
         marker="o", linestyle="-", color="green")
plt.title("Average Laptop Price Vs Screen Size")
plt.ylabel("Screen Size(Inches)")
plt.xlabel("Average Price(Euros)")
plt.grid(True)
plt.show()
No description has been provided for this image

This chart shows how average laptop price changes depending on screen size.

Key Insight:

Prices vary across screen sizes, but larger screens (17-19 inches) tend to have higher average prices, indicating they are premium models.

chart 5: Operating System Vs Laptop Price.¶

In [7]:
sns.boxplot(x="OS", y="Price_euros", hue="OS",data=df, palette="Set3",dodge=False)
plt.legend([],[], frameon=False)
plt.title("Operating System vs Laptop Price")
plt.show()
No description has been provided for this image

This Boxplot compares price ranges for different operating systems like Windows, macOS, Linux, Chrome OS.

Key Insight:

macOS has highest price range,while Chrome OS and Linux laptops are mostly low-priced, showing they are budget friendly.

Chart 6: Touchscreen Vs Non-Touchscreen.¶

In [27]:
df["Touchscreen"].value_counts().plot(kind="pie", autopct="%.1f%%",
                                     figsize=(6,3))
plt.title("Touchscreen Availability")
plt.ylabel("")
plt.show()
No description has been provided for this image

This pie chart shows the percentage of laptops that hve a touchscreen features.

Key Insight:

Only 14.7% of laptops have a touchscreen.Most laptops(85.3%) are non-touchscreen,meaning the feature is less common.

Chart 7: Number of Laptops per Company¶

In [17]:
company_count=df["Company"].value_counts()
plt.figure(figsize=(8,4))
plt.barh(company_count.index, company_count.values, color="purple")
plt.xlabel("Number of Laptops")
plt.ylabel("Number of Laptops per Company")
plt.show()
No description has been provided for this image

This chart displays how many laptop models each company has in the dataset.

Key Insight:

Dell,Lenovo,and HP have the most number of models, while brands like Huawel,LG,and Google have very few.

Chart 8: Top 5 products with highest Screen Height .¶

In [41]:
top_screenH = df.nlargest(5, 'ScreenH')[['Product', 'ScreenH']]
top_screenH
plt.figure(figsize=(6,3))
plt.barh(top_screenH['Product'], top_screenH['ScreenH'], color='orange')
plt.xlabel("Screen Height (pixels)")
plt.title("Top 5 Products with Highest Screen Height")
plt.gca().invert_yaxis()
plt.show()
No description has been provided for this image

This chart lists the top 5 laptops with the highest screen resolution height(in pixels).

Key Insight:

Models like EliteBook Follo,Spectre x360,Yoga 920 have the highest screen heights,indicatig high-resolution displays.

Chart 9: IPS Panel Vs Non-IPS Panel.¶

In [29]:
df["IPSpanel"].value_counts().plot(kind="pie", autopct="%.1f%%", figsize=(6,3))
plt.title("IPS Panel Vs Non-IPS Panel")
plt.ylabel("")
plt.show()
No description has been provided for this image

This pie chart shows how many laptops use IPS panels compared to non-IPS screens.

Key Insight:

Only 28% of laptops have IPS panels.Most laptops(72%) use non-IPS displays,meaning IPS screen is a premium feature.

Chart 10: GPU Company Vs Laptop Price.¶

In [38]:
plt.figure(figsize=(6,4))
sns.barplot(x='GPU_company', y='Price_euros', data=df, color="cyan")
plt.title("GPU Company vs Laptop Price")
plt.xlabel("GPU Company")
plt.ylabel("Price (Euros)")
plt.show()
No description has been provided for this image

This bar plot shows how different GPU brands influence the overall pricing. Nvidia-based laptops have the highest average prices, while ARM-based laptops are the least expensive.

Key Insight:

Nvidia GPUs are found in the most expensive laptops, indicating high performance and premium categories. ARM and AMD laptops fall in the mid-range.

Conclusion:¶

In this Project, I analyzed the laptop dataset using Python, Pandas, and visualization libraries. I cleaned the data, explored different features, and created various charts to understand pricing trends. From the analysis, I observed how laptop price changing with company, GPU, OS, screen size, weight, RAM, touchscreen, and other specifications. These Insights help in understanding what features influence laptop prices the most and which products are more common in the marke

In [ ]: